AOP and CSS
Scoping이 안되기 때문에 생기는 문제
다른 곳에서 정의한 스타일이 원치 않는 요소에 영향을 준다.
- (디자인에 일관성이 있고 셀렉터를 잘 정의했다는 가정 하에) 영향을 주는 게 정상
- 가끔 예외가 있으면 해당 속성만 덮어쓰거나 “unset”, “initial”, “reset”, “inherit” 등으로 설정
- 예외가 많다면? 1) 디자인이 잘못되었거나 2) 셀렉터 코딩을 잘못 했거나 3) 위빙weaving을 제대로 고려하지 않았거나.
CSS inheritance로 인해 DOM의 조상 스타일이 자손 스타일에 영향을 준다.
- 영향을 주는 게 정상
- 가끔 예외가 있으면 해당 속성만 덮어쓰거나 “unset”, “initial”, “reset” 등으로 설정
- 예외가 많다면? 1) 디자인이 잘못되었거나 2) 조상 스타일의 코딩을 잘못 했거나 3) 위빙weaving을 제대로 고려하지 않았거나.
클래스 이름의 충돌이 생길 수 있다.
- selector 조합으로 이름 공간 만들기 하기
- SMACSS에서와 같이 aspects에 따라 prefix를 붙이기
안 쓰이는 CSS를 발견하기 어렵다.
- 디자인 시스템 문서를 잘 만들어두면 Chrome의 Coverage 도구로 쉽게 제거할 수 있음
연결되는 개념들
- Cross-cutting concern
- CSS selector == Pointcut designator
- CSS cascading == Aspect weaving
- Tyranny of the dominant decomposition
AOP에서 참고할 점
Aspect-oriented software development 17장 6절 “Aspect Interaction” 및 참고문헌
- “However, the aspects themselves need not be orthogonal to one another, and this leads to the potential for aspect interactions (interference), where aspects may cooperate or interact with each other or the base program in unexpected ways.”
- “This problem is not unique to aspect-oriented programming and is well-understood within the domain of telecommunication systems. Borrowing the definition of feature interactions from [52], we can say that an aspect interaction occurs if the behavior of one aspect is affected by the behavior of another aspect. Given the inevitability of aspect interactions, three angles can be considered with respect to providing a solution: avoidance, detection, and resolution, all of which are currently under-researched areas.”
AOSD 21장. “Concern Modeling for Aspect-Oriented Software Development”